/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package prjtgl.controler.recruteur;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.AfterCompose;
import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.ContextParam;
import org.zkoss.bind.annotation.ContextType;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.idom.Item;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.Selectors;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;

import org.zkoss.zul.Groupbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Textbox;
import prjtgl.metier.Application;
import prjtgl.metier.comptes.Membre;
import prjtgl.metier.comptes.Recruteur;
import prjtgl.metier.comptes.profil_societe.Societe;
import prjtgl.metier.comptes.profil_utilisateur.DomaineExpertise;
import prjtgl.metier.comptes.profil_utilisateur.Profil;
import prjtgl.util.SessionUtilisateur;

/**
 *
 * @author Adrien
 */
public class RechercheMembre extends SelectorComposer {

	//InboxData info = new InboxData();
	Societe societe;
	@Wire
	Listbox profil, disponibilite, domaine;
	@Wire
	Textbox annee;

	@AfterCompose
	public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {
		Selectors.wireComponents(view, this, false);
		Recruteur r = (Recruteur)SessionUtilisateur.getUtilisateur();
		societe = r.getSociete();
	}

	@Command
	public void chargeMembre(@BindingParam("membre") String content) {
                
                
		Map<String, Object> args = new HashMap();
		Sessions.getCurrent().setAttribute("contact",Application.getInstance().rechercherUtilisateur(content));
		args.put("content", "Recruteur/ProfilMembre.zul");
		BindUtils.postGlobalCommand(null, null, "changePage", args);
	}

	@Command
	@NotifyChange("resultats")
	public void recherche() {
		int v_annee;
		String v_disponibilite;
		ArrayList<DomaineExpertise> v_domaine = new ArrayList<DomaineExpertise>();
		Profil v_profil;

		for (Listitem it : domaine.getSelectedItems()) {
			DomaineExpertise de = Application.getInstance().rechercherDomainesExpertise(it.getLabel());
			if (de != null) {
				v_domaine.add(de);
			}
		}
		if (profil.getSelectedItem() != null) {
			v_profil = Application.getInstance().rechercherProfil(profil.getSelectedItem().getLabel());
		} else {
			v_profil = null;
		}

		if (disponibilite.getSelectedItem() != null) {
			v_disponibilite = disponibilite.getSelectedItem().getLabel();
		} else {
			v_disponibilite = null;
		}

		if (annee.getValue().equals("")) {
			v_annee = 0;
		} else {
			v_annee = Integer.parseInt(annee.getValue());
		}

		Map<Membre, Integer> results = Application.getInstance().rechercherRessource(v_domaine, v_profil, v_annee, null);

		ArrayList<Membre> membres = new ArrayList<Membre>();
		for (Map.Entry<Membre, Integer> entry : results.entrySet()) {
			membres.add(entry.getKey());
                        
		}
		//info.setListeRecherche(members);
                setListeRecherche(membres); 
                
	}
        
        List<Membre> membres = new ArrayList<Membre>();
        
        public List<Membre> getMembres() { return membres;}
        public void setMembres(List<Membre> membres) { this.membres = membres; }
        
        List<Recherche> resultats = new ArrayList<Recherche>();
        
        public List<Recherche> getResultats() { return resultats;}
        public void setResultats(List<Recherche> resultats) { this.resultats = resultats; }
        
        

        
        
        public class Recherche {

			private Membre membre;
			private int proximiteEntreprise;
			private int anneeExperience;

			Recherche(Membre m, int v1, int v2) {
				membre = m;
				proximiteEntreprise = v1;
				anneeExperience = v2;
			}

			public Membre getMembre() {
				return membre;
			}
                        public void setMembre(Membre membre) { this.membre = membre; }

			public int getProximiteEntreprise() {
				return proximiteEntreprise;
			}
                        public void setProximiteEntreprise(int proximiteEntreprise) { this.proximiteEntreprise = proximiteEntreprise; }
                        
			public int getAnneeExperience() {
				return anneeExperience;
			}
                        public void setAnneeExperience(int anneeExperience) { this.anneeExperience = anneeExperience; }
                        
                        public String stringDisponibilite(Membre membre)
                        {
                            if ( membre.getDisponibilite() != null )
                            {
                                 if  ( membre.getDisponibilite().isPermanent()) return "En contrat permanent";
                                else return "En prestation";
                            }
                            else return "";
                        }
		}

        public void setListeRecherche(List<Membre> resultatRecherche) 
        {
            membres = resultatRecherche;

            resultats = new ArrayList<Recherche>();
            for (Membre m : membres) 
            {
              
                resultats.add(new Recherche(m, -1, -1));
            }
        }
        
        /*
	public InboxData getInfo() {
		return info;
	}

	public class InboxData {

		List<Membre> lesMembres = new ArrayList<Membre>();
		List<Recherche> lesResultats = new ArrayList<Recherche>();

		public InboxData() {
			initData();  // TODO FOR TESTING
		}

		private void initData() {
			// sesExperiences.add(new Experience());
			System.out.println(" Hello ");
		}

		public List<Recherche> getLesResultats() {
			return lesResultats;
		}
                
                public void setLesResultats(List<Recherche> lesResultats) { this.lesResultats = lesResultats; }

		public void setListeRecherche(List<Membre> resultatRecherche) {
			lesMembres = resultatRecherche;

			lesResultats = new ArrayList<Recherche>();
			for (Membre m : lesMembres) {
				lesResultats.add(new Recherche(m, -1, -1));
			}


		}

		public class Recherche {

			private Membre membre;
			private int proximiteEntreprise;
			private int anneeExperience;

			Recherche(Membre m, int v1, int v2) {
				membre = m;
				proximiteEntreprise = v1;
				anneeExperience = v2;
			}

			public Membre getMembre() {
				return membre;
			}
                        public void setMembre(Membre membre) { this.membre = membre; }

			public int getProximiteEntreprise() {
				return proximiteEntreprise;
			}
                        public void setProximiteEntreprise(int proximiteEntreprise) { this.proximiteEntreprise = proximiteEntreprise; }
                        
			public int getAnneeExperience() {
				return anneeExperience;
			}
                        public void setAnneeExperience(int anneeExperience) { this.anneeExperience = anneeExperience; }
		}
	}
        * */
}
